package com.springboot.util;

import com.springboot.model.PicUploadResult;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.UUID;

/**
 * 图片上传的工具类
 * Param MultipartFile
 */
public class uploadPhoto {
    public PicUploadResult uploadFile(MultipartFile uploadFile) {
        PicUploadResult picUploadResult=new PicUploadResult();
        //1.判断是否为图片
        String fileName=uploadFile.getOriginalFilename();
        //不是图片
        if(!fileName.matches("^.*(png|jpg|gif|jpge)$")){
            //不是图片类型
            picUploadResult.setError(1);
            return picUploadResult;
        }
        //2.判断是否为恶意程序
        try {
            BufferedImage bufferedImage=
                    ImageIO.read(uploadFile.getInputStream());
            //2.1获取宽高
            int height=bufferedImage.getHeight();
            int width=bufferedImage.getWidth();

            if(height==0||width==0){
                //表示不是图片
                picUploadResult.setError(1);
                return picUploadResult;
            }

            //3.由于文件个数多,采用分文件存储
            String dateDir=
                    new SimpleDateFormat("yyyy/MM/dd")
                            .format(new Date());

            //生成对应的文件夹
            String dirPath="pictures"+dateDir;
            //判断是否存在
            File file=new File(dirPath);
            if(!file.exists()){
                //生成文件夹
                file.mkdirs();
            }
            //防止图片上传量过大引起的重名问题
            String  uuidName=
                    UUID.randomUUID()
                            .toString().replace("-", "");
            String  randomNum=((int)(Math.random()*99999))+"";
            //获取文件后缀名
            String fileType=
                    fileName.substring(
                            fileName.lastIndexOf("."));
            String prefix=fileName.substring(0, fileName.lastIndexOf("."));
            //路径拼接(文件真实的存储路径)
            String  fileDirPath=
                    dirPath+"/"+prefix+uuidName+randomNum+fileType;

            //文件上传
            uploadFile.transferTo(new File(fileDirPath));

            //生成正确的页面回显信息
            picUploadResult.setHeight(height+"");
            picUploadResult.setWidth(width+"");
            /**1.本地磁盘路径
             * 2.网络虚拟路径
             */
            String  urlDir="http://image.jt.com/";
            String urlPath=urlDir+dateDir+"/"+prefix+uuidName+randomNum+fileType;
            picUploadResult.setUrl(urlPath);

        } catch (IOException e) {
            e.printStackTrace();
        }

        return picUploadResult;
    }
}
